/*
 * Clase que permite crear instancias de cada raza a traves de
 * la lectura de los .XML de cada raza.
 */
package fuente;

import java.io.File;
import java.io.IOException;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;

public class LectorXMLRaza {
    private String _nombre,
                   _religion;
    private int _ptosIntelecto,
                _ptosFuerza,
                _ptosMagia,
                _ptosReligion,
                _resistenciaMezquita,
                _resistenciaMetropolis;
    
    /**
     * Constructor, crea la instancia raza.
     * @param pArchivo Nombre del archivo .XML para inicializar
     * @throws ParserConfigurationException
     * @throws SAXException
     * @throws IOException 
     */
    public LectorXMLRaza (String pArchivo) throws ParserConfigurationException, 
                                                  SAXException, IOException {
        
        leerXML(pArchivo);
    }
    
    /**
     * Metodo que inicializa los atributos de la raza de acuerdo
     * a los datos contenidos en los XML.
     * @param pArchivo Nombre del archivo XML a leer.
     * @throws ParserConfigurationException
     * @throws SAXException
     * @throws IOException 
     */
    private void leerXML(String pArchivo) throws ParserConfigurationException, 
                                                 SAXException, IOException {
        
        DocumentBuilderFactory docBF = DocumentBuilderFactory.newInstance();
        DocumentBuilder docB = docBF.newDocumentBuilder();
        org.w3c.dom.Document doc = docB.parse(new File("src/xml/Raza/"+pArchivo));
        
        doc.getDocumentElement().normalize();
        
        if (doc.getDocumentElement().getNodeName().equals(""))
            System.out.println("El archivo no existe!");
        
        
        
        setNombre(getTagValue("Nombre", doc.getDocumentElement()));
        
        setReligion(getTagValue("Religion", doc.getDocumentElement()));
        
        setPtosIntelecto(Integer.parseInt(getTagValue("PuntosIntelecto", doc.getDocumentElement())));
        
        setPtosFuerza(Integer.parseInt(getTagValue("PuntosFuerza", doc.getDocumentElement())));
        
        setPtosMagia(Integer.parseInt(getTagValue("PuntosMagia", doc.getDocumentElement())));
        
        setPtosReligion(Integer.parseInt(getTagValue("PuntosReligion", doc.getDocumentElement())));
        
        setResistenciaMezquita(Integer.parseInt(getTagValue("ResistenciaMezquita", doc.getDocumentElement())));
        
        setResistenciaMetropolis(Integer.parseInt(getTagValue("ResistenciaMetropolis", doc.getDocumentElement())));
    }
    
    /**
     * Metodo que obtiene el valor de una etiqueta en el archivo .XML.
     * @param pTag Etiqueta a buscar
     * @param pE elemento en donde se encuentra la etiqueta
     * @return Valor de la etiqueta
     */
    private String getTagValue(String pTag, Element pE) {
        NodeList lista = pE.getElementsByTagName(pTag).item(0).getChildNodes();
        
        Node valor = (Node) lista.item(0);
        
        return valor.getNodeValue();
    }

    /* Inicio implementacion de getters y setters */
    /**
     * @return El nombre de la raza
     */
    public String getNombre() {
        return _nombre;
    }

    /**
     * @return La religion de la raza
     */
    public String getReligion() {
        return _religion;
    }

    /**
     * @return Los puntos de intelecto
     */
    public int getPtosIntelecto() {
        return _ptosIntelecto;
    }

    /**
     * @return los puntos de fuerza
     */
    public int getPtosFuerza() {
        return _ptosFuerza;
    }

    /**
     * @return los puntos de magia
     */
    public int getPtosMagia() {
        return _ptosMagia;
    }

    /**
     * @return los puntos de religion
     */
    public int getPtosReligion() {
        return _ptosReligion;
    }

    /**
     * @return los puntos de resistencia de la mezquita
     */
    public int getResistenciaMezquita() {
        return _resistenciaMezquita;
    }

    /**
     * @return los puntos de resistencia de la metropolis
     */
    public int getResistenciaMetropolis() {
        return _resistenciaMetropolis;
    }
    

    /**
     * @param pNombre El nombre de la raza
     */
    public void setNombre(String pNombre) {
        this._nombre = pNombre;
    }

    /**
     * @param pReligion El nombre de la religion
     */
    public void setReligion(String pReligion) {
        this._religion = pReligion;
    }

    /**
     * @param pPtosIntelecto Los puntos de intelecto
     */
    public void setPtosIntelecto(int pPtosIntelecto) {
        this._ptosIntelecto = pPtosIntelecto;
    }

    /**
     * @param pPtosFuerza Los puntos de Fuerza
     */
    public void setPtosFuerza(int pPtosFuerza) {
        this._ptosFuerza = pPtosFuerza;
    }

    /**
     * @param pPtosMagia Los puntos de magia
     */
    public void setPtosMagia(int pPtosMagia) {
        this._ptosMagia = pPtosMagia;
    }

    /**
     * @param pPtosReligion Los puntos de religion
     */
    public void setPtosReligion(int pPtosReligion) {
        this._ptosReligion = pPtosReligion;
    }

    /**
     * @param pResistenciaMezquita Los puntos de resistencia de la mezquita
     */
    public void setResistenciaMezquita(int pResistenciaMezquita) {
        this._resistenciaMezquita = pResistenciaMezquita;
    }

    /**
     * @param pResistenciaMetropolis Los puntos de resistencia de la metropolis
     */
    public void setResistenciaMetropolis(int pResistenciaMetropolis) {
        this._resistenciaMetropolis = pResistenciaMetropolis;
    }
    /* Final implementacion de getters y setters */

}
